package com.company;
//  数据类型的转换  大容量接收小的自动类型转换  小的接收大的得强制类型转换

import java.util.Scanner;

//自动转换的 例子
//  byte (八位 一字节) --> short（十六位 两字节）
//  short -- > int（32位 四个字节 64位计算机也是）
//  float（四字节 一字节是整数加符号位 其他是小数部分） --> double（11指数 52 整数 一位符号位 一共64位）
//  char（一个字节八位） --> int   可以上互转换  结果是assail码
// int -->  long
//可能会丢失精度的
//float --> double 近似值
// long --> double
//int -->double
//  byt int short 在计算时会转换成int
public class A_1Type {
    public static void main(String [] args ){
        Scanner input = new Scanner(System.in);


/*
        short a = 10;
        int b =a + 'c';  得用int接收
        int c = 'c';
        System.out.println(b);//自动转换为int 不然则报错
        s+=1;  这么写没问题 s 是short类型  （这里的1 是short类型）
        但是 s = s+1 就不行 得赋值给一个int类型的变量  这里的1 是int类型
        运算符的优先级 a/b 都是整除  没有余数
        a = b++ 先赋值后 自增
        a = ++b 先自增后赋值

        赋值运算符
        = 赋值
        += a = 1 ,a+=4 相当于 a = a+4
         -= ， /= ， %= ， *=
        short s =10;
        s+=1;  这么写没问题 s 是short类型
         但是 s = s+1 就不行 得赋值给一个int类型的变量
        System.out.print(s);
        关系运算符  返回值为boolean类型

        Scanner get = new Scanner(System.in);
        int a1 = get.nextInt();
        System.out.print(a1);
//
 */

        /*
         *
         *
         *    逻辑运算
         *
         * &  与 两个都为true 结果才是true 否足额是false
         * |  或
         * ！ 非
         * ^异或运算  两边相同为true 否则为 false
         *
         * && 短路与  单独运算与上不同
         * || 短路或
         *
         * 非零即真 非真即假
         *
         * ~取反符号
         */
        /*
         * 与运算  有零则零           &
         * 或又算  有一则一           |
         *
         * 异或运算 ^  相同则为一   不同则为0
         *
         * 位运算
         *
         * 移位运算 a<<b    把a逐位左移b位 因为符号位在左边  不用带符号  右边空出位补零
         * 带符号>> 右移     同上                                  左边空位补零
         * 不带符号右移 >>>
        System.out.println(Integer.toBinaryString(100));
        System.out.println(Integer.toBinaryString(10<<2));
        System.out.println(Integer.toBinaryString(10));
        *
        1100100
        101000
        1010*/
/*
 *
 *      位移数作为操2的次幂  与操作数相乘   8 << 2  8左移两位  相当于  8 * 4  最快的方法
 *
 *
 *
*
*


        System.out.println(6<<3);  // 8 *6
        System.out.println(40 >> 2); // 40 /4
*/


//        /*请输入两个数  初始化这两个数之后交换位置  输出结果*/
//          int a , b ,c;
////          c =a ;
//            a = b;
//            b = c;  普通的交换方法  最靠谱的
//            a =1;
//            b =2 ;
//        不通过中间变量
//
/**  int a,b;
        a = 1;
        b = 2 ;
        a = a + b - (b = a);   比较靠谱的
        System.out.println("a = "+ a+",b = "+b);
        a =a +b;
        b = a -b;
        a = a -b;
        System.out.println("a = "+ a+",b = "+b);

 最快的交换方法    一个数和自己异或永远为0，而0和任何数异或，都等于这个数
                两个值中间有个中间值  先给a
                在用这个和b异或 还原a的值
                    给a 和 这个数在还原b 给a  完成交换
        a = a^b;
        b = a^b;
        a = a^b;
 System.out.println("a = "+ a+",b = "+b);
 还有乘除


 */



    }


}
